package com.zhss.designpattern.decorator;

/**
 * @author fanwei
 * @desc 装饰器模式
 *       场景:
 *      （1）假设我们手头已经有了一个类，可以执行一些功能
 *      （2）但是我们还是希望对这个类的功能做一些增强，此时怎么办呢？基于已有的类的功能基础之上，再增强一些功能，可以做装饰
 */
public class DecoratorPatternDemo {

    interface Component{
        void execute();
    }

    static class ConcreteComponent implements Component{
        @Override
        public void execute() {
            System.out.println("执行基础功能......");
        }
    }

    static class Decorator implements Component{
        private Component component;

        public Decorator(Component component) {
            this.component = component;
        }

        @Override
        public void execute() {
            System.out.println("----- execute执行前执行的代码 -------");
            component.execute();
            System.out.println("----- execute执行后执行的代码 -------");
        }
    }

    public static void main(String[] args) {
        Decorator decorator = new Decorator(new ConcreteComponent());
        decorator.execute();
    }
}
